/* Pi-hole: A black hole for Internet advertisements
*  (c) 2017 Pi-hole, LLC (https://pi-hole.net)
*  Network-wide ad blocking via your own hardware.
*
*  This file is copyright under the latest version of the EUPL.
*  Please see LICENSE file for your rights under this license. */
function eventsource() {
    var alInfo = $("#alInfo");
    var alSuccess = $("#alSuccess");
    var ta = $("#output");

    // IE does not support EventSource - exit early
    if (typeof EventSource !== "function") {
        ta.show();
        ta.html("Updating lists of ad-serving domains is not supported with this browser!");
        return;
    }
    var source = new EventSource("scripts/pi-hole/php/gravity.sh.php");

    ta.html("");
    ta.show();
    alInfo.show();
    alSuccess.hide();

    source.addEventListener("message", function(e) {
        if(e.data.indexOf("Pi-hole blocking is") !== -1)
        {
            alSuccess.show();
        }

        // Detect ${OVER}
        if(e.data.indexOf("<------") !== -1)
        {
            ta.text(ta.text().substring(0, ta.text().lastIndexOf("\n")) + "\n");
            var new_string = e.data.replace("<------", "");
            ta.append(new_string);
        }
        else
        {
            ta.append(e.data);
        }

    }, false);

    // Will be called when script has finished
    source.addEventListener("error", function(e) {
        alInfo.delay(1000).fadeOut(2000, function() { alInfo.hide(); });
        source.close();
        $("#gravityBtn").removeAttr("disabled");
    }, false);
}

$("#gravityBtn").on("click", function(){
    $("#gravityBtn").attr("disabled", true);
    eventsource();
});

// Handle hiding of alerts
$(function(){
    $("[data-hide]").on("click", function(){
        $(this).closest("." + $(this).attr("data-hide")).hide();
    });

    // Do we want to start updating immediately?
    // gravity.php?go
    var searchString = window.location.search.substring(1);
    if(searchString.indexOf("go") !== -1)
    {
        $("#gravityBtn").attr("disabled", true);
        eventsource();
    }
});
